package com.zf.websocket.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;

/**
 * 添加 webSocket 配置类，使用 @EnableWebSocket 注解启用WebSocket。
 * 只使用 ServerEndpointExporter 类注册端点
 */
@Slf4j
@Configuration
@EnableWebSocket
public class WebSocketConfig {

    /**
     * 注入 ServerEndpointExporter， 该 bean 会自动扫描 @ServerEndpoint 注解修饰的端点bean并注册为相应的webSocket服务。
     */
    @Bean
    public ServerEndpointExporter serverEndpoint() {
        return new ServerEndpointExporter();
    }

    /**
     * WebSocket容器配置
     */
    @Bean
    public ServletServerContainerFactoryBean createWebSocketContainer() {
        ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
        // 设置文本消息数据缓冲区的大小，单位字节，默认8192
        container.setMaxTextMessageBufferSize(8192);
        // 设置二进制消息数据缓冲区的大小，单位字节，默认8192
        container.setMaxBinaryMessageBufferSize(8192 * 1024);
        // 设置 WebSocketSession的最大空闲时间，如果空闲时间超过设置时间则断开连接，单位ms。默认0表示没有时间限制
        container.setMaxSessionIdleTimeout(500000L);

        return container;
    }

}